package com.rainng.coursesystem.service.admin;

import com.rainng.coursesystem.manager.admin.MajorManager;
import com.rainng.coursesystem.model.entity.MajorEntity;
import com.rainng.coursesystem.model.vo.response.ResultVO;
import com.rainng.coursesystem.service.BaseService;
import org.springframework.stereotype.Service;

@Service
// 定义一个名为MajorService的公开类，它继承自BaseService。
public class MajorService extends BaseService {
    // 定义一个私有final属性manager，用于注入MajorManager实例。
    private final MajorManager manager;

    // MajorService的构造函数，通过参数接收一个MajorManager实例。
    public MajorService(MajorManager manager) {
        this.manager = manager;
    }

    // 获取专业信息的总页数。
    public ResultVO getPageCount(String departmentName, String name) {
        // 调用manager的getPageCount方法，传入系名称和专业名称，并将结果包装在ResultVO中返回。
        return result(manager.getPageCount(departmentName, name));
    }

    // 根据页码获取专业信息的分页数据。
    public ResultVO getPage(Integer index, String departmentName, String name) {
        // 调用manager的getPage方法，传入页码、系名称和专业名称，并将结果包装在ResultVO中返回。
        return result(manager.getPage(index, departmentName, name));
    }

    // 根据ID获取专业详细信息。
    public ResultVO get(Integer id) {
        // 调用manager的get方法，传入专业ID，获取专业实体。
        MajorEntity entity = manager.get(id);
        // 如果实体为空，表示专业不存在，返回失败的结果。
        if (entity == null) {
            return failedResult("专业Id: " + id + "不存在!");
        }
        // 如果实体存在，将其包装在ResultVO中返回。
        return result(entity);
    }

    // 更新专业信息。
    public ResultVO update(MajorEntity entity) {
        // 检查专业ID是否存在，如果不存在，返回失败的结果。
        if (manager.get(entity.getId()) == null) {
            return failedResult("专业Id: " + entity.getId() + "不存在!");
        }
        // 检查所属系ID是否存在，如果不存在，返回失败的结果。
        if (manager.getDepartmentById(entity.getDepartmentId()) == null) {
            return failedResult("所属系Id: " + entity.getDepartmentId() + "不存在!");
        }
        // 如果检查通过，调用manager的update方法更新专业信息。
        manager.update(entity);
        // 返回成功的更新结果。
        return result("更新成功");
    }

    // 删除专业信息。
    public ResultVO delete(Integer id) {
        // 检查专业ID是否存在，如果不存在，返回失败的结果。
        if (manager.get(id) == null) {
            return failedResult("专业Id: " + id + "不存在!");
        }
        // 检查专业中是否有未删除的班级，如果有，返回失败的结果。
        if (manager.hasClass(id)) {
            return failedResult("此专业中还有班级未被删除");
        }
        // 如果检查通过，调用manager的delete方法删除专业信息。
        manager.delete(id);
        // 返回成功的删除结果。
        return result("删除成功");
    }

    // 创建新的专业信息。
    public ResultVO create(MajorEntity entity) {
        // 检查专业ID是否已存在，如果已存在，返回失败的结果。
        if (manager.get(entity.getId()) != null) {
            return failedResult("专业Id: " + entity.getId() + "已存在!");
        }
        // 检查所属系ID是否存在，如果不存在，返回失败的结果。
        if (manager.getDepartmentById(entity.getDepartmentId()) == null) {
            return failedResult("所属系Id: " + entity.getDepartmentId() + "不存在!");
        }
        // 如果检查通过，调用manager的create方法创建新的专业信息。
        manager.create(entity);
        // 返回成功的创建结果。
        return result("添加成功");
    }

    // 获取专业名称列表。
    public ResultVO listName() {
        // 调用manager的listName方法，获取专业名称列表，并将其包装在ResultVO中返回。
        return result(manager.listName());
    }
}

